#!/bin/bash
#
# Script to generate unit test coverage report, requires lcov:
#
# http://ltp.sourceforge.net/coverage/lcov.php
#

# Tests with coverage enabled:
TESTS="test-access \
test-device \
test-firewall \
test-globalproxy \
test-ippool \
test-iptables \
test-sailfish_access \
test-sailfish_iptables_ext \
test-sailfish_wakeup_timer \
test-sailfish_datacounter \
test-sailfish_datacounters \
test-sailfish_datahistory \
test-sailfish_developer_mode \
test-vpn-settings \
test-vpn_access \
test-sailfish_vpn_access"

pushd `dirname $0` > /dev/null
TEST_DIR="$PWD"
pushd .. > /dev/null
BASE_DIR="$PWD"
popd > /dev/null
popd > /dev/null

FULL_COV="$TEST_DIR/full.gcov"
PLUGINS_COV="$TEST_DIR/plugins.gcov"
SRC_COV="$TEST_DIR/src.gcov"
VPN_COV="$TEST_DIR/vpn.gcov"
OUT="$TEST_DIR/html"

# Clean everything up
find "$BASE_DIR" -name "*.gcda" -exec rm {} \;
rm -f "$FULL_COV" "$PLUGINS_COV" "$SRC_COV" "$VPN_COV"
rm -fr "$OUT"

# Run the tests
for t in $TESTS ; do
    if [ -x "$TEST_DIR/$t" ] ; then
        pushd "$TEST_DIR" > /dev/null
        "$TEST_DIR/$t"
        RC=$?
        popd > /dev/null
        [ $RC = 0 ] || exit 1
    fi
done

# LCOV 1.10 has branch coverage disabled per default
LCOV_OPT="--rc lcov_branch_coverage=1"
GENHTML_OPT="--branch-coverage"

lcov $LCOV_OPT -c -d "$BASE_DIR" -o "$FULL_COV" || exit 1
lcov $LCOV_OPT -e "$FULL_COV" "$BASE_DIR/plugins/*" -o "$PLUGINS_COV" || exit 1
lcov $LCOV_OPT -e "$FULL_COV" "$BASE_DIR/src/*" -o "$SRC_COV" || exit 1
lcov $LCOV_OPT -e "$FULL_COV" "$BASE_DIR/vpn/*" -o "$VPN_COV" || exit 1
genhtml $GENHTML_OPT -t connman "$PLUGINS_COV" "$SRC_COV" "$VPN_COV" --output-directory "$OUT" || exit 1

echo Coverage report: $OUT/index.html
